/**  
 * 给你一个二维整数数组 ranges ，其中 ranges[i] = [starti, endi] 表示 starti 到 endi 之 * 间（包括二者）的所有整数都包含在第 i 个区间中。
 * 
 * 你需要将 ranges 分成 两个 组（可以为空），满足：
 * 
 * 每个区间只属于一个组。
 * 两个有 交集 的区间必须在 同一个 组内。
 * 如果两个区间有至少 一个 公共整数，那么这两个区间是 有交集 的。
 * 
 * 比方说，区间 [1, 3] 和 [2, 5] 有交集，因为 2 和 3 在两个区间中都被包含。
 * 请你返回将 ranges 划分成两个组的 总方案数 。由于答案可能很大，将它对 109 + 7 取余  * 后返回。
 * 
 * 思路  : 重点就是分组，按起点大小排序，然后分组，每多一组，方案数就翻倍
*/

/**
 * @param {number[][]} ranges
 * @return {number}
 */
var countWays = function(ranges) {
    const newArr = ranges.sort((a, b) => a[0] - b[0])
    // console.log(newArr)
    const mod = 1e9 + 7
    let count = -1
    let res = 1
    newArr.forEach(item => {
        // 下一个 
        if (item[0] > count) {
            // 新组 更新标记 计算结果
            count = item[1]
            res = (res * 2) % mod
        } else {
            // 更新 尾标
            count = Math.max(item[1], count)
        }
    })
    return res
};
const ranges = [[4,5],[10,15],[21,25],[27,32],[6,7],[11,15]]
console.log(countWays(ranges))